﻿using System;
using System.Collections.Generic;
using System.Collections;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Cafe_Prices
{
    class Program
    {
    //Опишите базовый класс MenuItem.У него должно быть поле name и метод PrintToConsole(). Так же у класса должен быть конструктор, в котором задается значение для поля name.
    //Опишите два производных класса Beverage и Snack
    //Класс Beverage должен содержать три цены: small, medium и large.Метод PrintToConsole() должен выводитьимя и все три цены на экран.Также необходимо определить конструктор для установки значений полей.
    //Класс Snack содержит одно поле – Price.Метод PrintToConsole() должен выводить на экран имя и цену.
    //Объявите в мейне массив из 7 MenuItem.Наполните его данными.В результате вы должны получить следующее:

        static void Main(string[] args)
        {
            MenuItem[] menu = new MenuItem[7];
            menu[0] = new Beverage(15.2, 20.5, 25.6, "Cacao");
            menu[1] = new Beverage(10, 15.5, 22.2, "Cola");
            menu[2] = new Beverage(25.5, 31.5, 40.2, "Juice");
            menu[3] = new Snack(40, "Burger");
            menu[4] = new Snack(50, "French fries");
            menu[5] = new Snack(15.5, "Snikers");
            menu[6] = new Snack(30, "Nuts");

            foreach (var item in menu)
            {
                item.PrintToConsole();
            }

        }
    }

    class MenuItem
    {
        private string name;


        public MenuItem(string name)
        {
            Name = name;
        }

        public string Name
        {
            get
            {
                return name;
            }
            set
            {
                if (String.IsNullOrWhiteSpace(value))
                {
                    throw new ArgumentException("Incorrect Name.");
                }
                name = value;
            }
        }

        public virtual void PrintToConsole() { }
        
    }
    class Beverage : MenuItem
    {
        private double small;
        private double medium;
        private double large;

        public Beverage(double small_price, double medium_price, double large_price, string name) : base(name)
        {
            Small = small_price;
            Medium = medium_price;
            Large = large_price;
        }

        public double Small
        {
            get
            {
                return small;
            }
            set
            {
                if (value<0)
                {
                    throw new ArgumentException("Incorrect price.");
                }
                small = value;
            }
        }

        public double Medium
        {
            get
            {
                return medium;
            }
            set
            {
                if (value < 0)
                {
                    throw new ArgumentException("Incorrect price.");
                }
                medium = value;
            }
        }

        public double Large
        {
            get
            {
                return large;
            }
            set
            {
                if (value < 0)
                {
                    throw new ArgumentException("Incorrect price.");
                }
                large = value;
            }
        }

        public override void PrintToConsole()
        {
            Console.WriteLine("{0} - Small: {1}$; Medium: {2}$; Large - {3}$.", Name, Small, Medium, Large);
        }
    }

    class Snack : MenuItem
    {
        private double price;

        public Snack(double price, string name) : base(name)
        {
            Price = price;
        }

        public double Price
        {
            get
            {
                return price;
            }
            set
            {
                if (value < 0)
                {
                    throw new ArgumentException("Incorrect price.");
                }
                price = value;
            }
        }

        public override void PrintToConsole()
        {
            Console.WriteLine("{0} - Price: {1}$.", Name, Price);
        }
    }

}
